Skip to content

本文介绍了如何使用GitHub Actions实现Hexo自动化部署,并指出了一些现有YAML代码所引用的脚本比较老导致报错的问题。

Hexo是一个快速、简单且强大的静态博客框架,而GitHub Actions则是一项功能强大的CI/CD工具,可以自动化地执行软件开发工作流程,用于自动构建、测试和部署代码,从而加快软件开发周期。

GitHub Actions使用YAML脚本语言,一种轻量级的标记语言,语法简单,相比JSON更加简介,可以轻松地编写和维护自动化工作流程。

1. SSH秘钥

我的Hexo分2个Git仓库,源码为私库 21ido.com,发布到 GitHub Pages为公开库 think2cat.github.io

因为是从源码私库push到Pages公开库,此时需要在公开库设置公钥

1.1 生成秘钥

执行下面代码,其中邮箱替换成自己的

cmd
ssh-keygen -t rsa -b 4096 -C "gavin2026@xxx.com" -f hexo -N ""

生成2个文件,hexo 和 hexo.pub

1.2 设置公钥

用记事本打开 hexo.pub,全选复制后到GitHub Pages库

Settings > Deploy keys > Add deploy key

Deploy key

把刚刚复制的粘贴进去,Title可以随便起,有多个公钥时可以区分,只有一个的话就无所谓了

然后记得把下面的 Allow write access勾上

Add deploy key

1.3 设置私钥

接着记事本打开hexo,全选复制,私钥会长很多,到源码库

Settings > Secrets > Actions > New repository secret

Actions

Name相当于变量名,可以自己起个名字,但要跟后面的yaml文件对应,系统默认大写,就算输入小写也会自动变成大写

New repository secret

确定后这步就完成了,等于从源码库push到页面库时,公钥和私钥作为检验权限使用,而把私钥加在这里,是为了避免在源码写秘钥容易泄露,而且Actions的日志遇到 Secret 里的变量时,会自动处理成 ***,而不是明文,也能避免私钥泄露

2. 创建工作流

因为写hexo是push到源码库,然后由源码库编译生成pages,再把生成的页面push到Pages库,所以工作流是建在源码库

点击 Actions > New workflow

New workflow

也可以直接在Git库根目录新建 .github \ workflows 目录,然后在 workflows 目录再新建 yml 文件,文件名随意,新建的工作流都会在Actions下显示

工作流分为几步骤

  1. checkout code
  2. 配置node环境
  3. 安装依赖包
  4. 安装hexo
  5. hexo生成页面
  6. 发布到GitHub Pages

完整的YML脚本如下

yaml
name: Deploy

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    name: Deploy blog
    steps:

    - uses: actions/checkout@v3

    - uses: actions/setup-node@v3
      with:
        node-version: '16'
        cache: 'npm'

    - name: Install Dependencies
      run: npm ci

    - name: install hexo...
      run: |
        npm install hexo-cli -g

    - name: hexo generate public files...
      run: |
        hexo clean
        hexo g

    - name: Deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
        external_repository: think2cat/think2cat.github.io
        publish_branch: master
        publish_dir: ./public

3. 报错解决

  • Please update the following actions to use Node.js 16

    最开始用的是网上找的脚本 actions/checkout@v1 和 actions/setup-node@v2 版本为12,于是改为 actions/checkout@v3 和 actions/setup-node@v3,并配上 16 版本属性

  • Error: pngquant failed to build, make sure that libpng-dev is installed

    使用部署脚本为 sma11black/hexo-action@v1.0.3 错误原因未知,可能是node版本兼容问题,改为全局安装 hexo + build

  • Please make sure you have the correct access rights and the repository exists. Error: Action failed with "The process '/usr/bin/git' failed with exit code 128"

    Git库权限问题,确保SSH公钥和私钥是一对,且对应的库没搞错

脚本依赖包没有考虑做缓存,可以自己试试用 actions/cache

4. 附录:

阮一峰YAML教程 https://www.ruanyifeng.com/blog/2016/07/yaml.html

Github Actions https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions

actions-gh-pages https://github.com/peaceiris/actions-gh-pages

上次更新于: